package cn.disicn.common.config;

import com.alibaba.druid.filter.stat.StatFilter;
import com.alibaba.druid.wall.WallFilter;
import com.jfinal.config.Constants;
import com.jfinal.config.Handlers;
import com.jfinal.config.Interceptors;
import com.jfinal.config.JFinalConfig;
import com.jfinal.config.Plugins;
import com.jfinal.config.Routes;
import com.jfinal.core.JFinal;
import com.jfinal.json.FastJsonFactory;
import com.jfinal.kit.PropKit;
import com.jfinal.plugin.activerecord.ActiveRecordPlugin;
import com.jfinal.plugin.activerecord.dialect.MysqlDialect;
import com.jfinal.plugin.druid.DruidPlugin;
import com.jfinal.plugin.ehcache.EhCachePlugin;
import com.jfinal.render.ViewType;
import com.jfinal.template.Engine;

import cn.disicn.Interceptors.LoginInterceptor;
import cn.disicn.controller.AppFeedbackController;
import cn.disicn.controller.AppSystemContactController;
import cn.disicn.controller.AppSystemHelpController;
import cn.disicn.controller.AppUserController;
import cn.disicn.controller.AppVersionController;
import cn.disicn.controller.BizJobsController;
import cn.disicn.controller.BizJobsOrderController;
import cn.disicn.controller.BizJobsOrderSubmitResultController;
import cn.disicn.controller.BizJobsTypeController;
import cn.disicn.controller.IndexController;
import cn.disicn.controller.OccupationalScopeController;
import cn.disicn.controller.RefundController;
import cn.disicn.controller.SecAdminUserController;
import cn.disicn.controller.SecPublishUserController;
import cn.disicn.controller.TransactionRecordController;
import cn.disicn.model._MappingKit;

/**
 * 
 * @author Luyao
 * @date 2017年11月24日 上午10:23:39
 * @desc: JFinal核心配置类
 */
public class MainConfig extends JFinalConfig {

	/**
	 * 配置JFinal常量
	 */
	@Override
	public void configConstant(Constants me) {
		// 读取数据库配置文件
		PropKit.use("datasource.properties");
		// 配置当前为开发模式
		me.setDevMode(PropKit.getBoolean("devMode"));
		// 配置默认视图类型
		me.setViewType(ViewType.JSP);
		// 配置404渲染视图
		me.setError404View("404.html");
		// 配置JSON工厂类型
		me.setJsonFactory(FastJsonFactory.me());
	}

	/**
	 * 配置路由映射
	 */
	@Override
	public void configRoute(Routes me) {
		me.addInterceptor(new LoginInterceptor());
		me.setBaseViewPath("/WEB-INF/view");
		me.add("/", IndexController.class);
		me.add("/secadminuser", SecAdminUserController.class);
		me.add("/secuser", SecPublishUserController.class);
		me.add("/bizjobs", BizJobsController.class);
		me.add("/bizjobstype", BizJobsTypeController.class);
		me.add("/appuser", AppUserController.class);
		me.add("/record", TransactionRecordController.class);
		me.add("/occupationalscope", OccupationalScopeController.class);
		me.add("/appsystemhelp", AppSystemHelpController.class);
		me.add("/appsystemcontact", AppSystemContactController.class);
		me.add("/appfeedback", AppFeedbackController.class);
		me.add("/appversion", AppVersionController.class);
		me.add("/refund", RefundController.class);
		me.add("/bizjobsorder", BizJobsOrderController.class);
		me.add("/bizjobsordersubmitresult", BizJobsOrderSubmitResultController.class);
	}

	/**
	 * 配置模板引擎
	 */
	@Override
	public void configEngine(Engine me) {
		// TODO Auto-generated method stub

	}

	/**
	 * 配置JFinal插件
	 */
	@Override
	public void configPlugin(Plugins me) {
		// 配置数据库连接池插件
		DruidPlugin druidPlugin = new DruidPlugin(PropKit.get("jdbcUrl"),
				PropKit.get("user"), PropKit.get("password"));
		druidPlugin.addFilter(new StatFilter()); // sql监控
		druidPlugin.addFilter(new WallFilter()); // 防止sql注入
		WallFilter wall = new WallFilter();
		wall.setDbType("mysql"); // mysql
		druidPlugin.addFilter(wall);
		// orm映射配置ActionRecord插件
		ActiveRecordPlugin activeRecordPlugin = new ActiveRecordPlugin(
				druidPlugin);
		// 显示sql语句
		activeRecordPlugin.setShowSql(PropKit.getBoolean("devMode"));
		// 配置MySQL方言
		activeRecordPlugin.setDialect(new MysqlDialect());
		// 添加表-对象映射
		_MappingKit.mapping(activeRecordPlugin);
		// 添加到插件列表中
		me.add(new EhCachePlugin()); // 缓存插件
		me.add(druidPlugin); // 数据库连接池插件
		me.add(activeRecordPlugin); // orm映射插件
	}

	/**
	 * 配置全局拦截器，不拦截静态资源
	 */
	@Override
	public void configInterceptor(Interceptors me) {

	}

	/**
	 * 配置全局处理器,拦截静态资源
	 */
	@Override
	public void configHandler(Handlers me) {

	}

	/**
	 * 项目测试运行入口
	 */
	public static void main(String[] args) {
		JFinal.start("src/main/webapp", 80, "/");
	}

}
